package main;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Escalonador {

	public static void main(String[] args) {

		TreeMap<Integer, List<Evento>> eventosProgramados = new TreeMap<>();
		int fatorChegadaEvento = 10;
		int proximoId = 1;
		int t = (int) ("" + System.nanoTime()).charAt(0);

		IGeradorNPA gerador = new GeradorNumerosAleatoriosMultiplicativa(1, t,
				20);

		// eventos gerados a cada {fatorChegada} totalizando 10 eventos.
		for (int i = 0; i < 10; i++) {
			eventosProgramados.put(i * fatorChegadaEvento,
					new LinkedList<Evento>());
			eventosProgramados.get(i * fatorChegadaEvento).add(
					new Evento(proximoId));
			proximoId++;
		}
		String saida="";
		while (eventosProgramados.keySet().size() > 0) {
			int proximo = eventosProgramados.firstKey();
			Evento evento = eventosProgramados.get(proximo).get(0);
			 saida += ("\ntempo " + proximo + ": " + evento.getTipo()
					+ " do evento com id " + evento.getId() + "\n");
			if (evento.getTipo().equals("chegada")
					|| evento.getTipo().equals("atendimento")) {
				evento.setTipo(evento.getTipo().equals("chegada") ? "atendimento"
						: "saida");
				int tempo = proximo + gerador.next();
				if (eventosProgramados.get(tempo) == null) {
					eventosProgramados.put(tempo, new LinkedList<Evento>());
				}
				eventosProgramados.get(tempo).add(evento);
			}
			eventosProgramados.get(proximo).remove(0);
			if (eventosProgramados.get(proximo).size() == 0) {
				eventosProgramados.remove(proximo);
			}
		}
		Gerenciador.gravaArquivo("escalonador.txt", saida);
	}

}
